# Обработка обращений граждан

## Общая информация
> Проект выполнен составом команды `AAA IT`:\
> \
    1. `Andrei Donskoi` <donskoi.com@gmail.com>\
    2. `Artem Medvedev` <artiebears@mail.ru>\
    3. `Ali Ramazanov` <ali_ramazanov_2000@mail.ru>\
    4. `Ivan Butakov` <vanessbut@yandex.ru>\
    5. `Timofei Shshudro` <t.shshudro@alumni.nsu.ru>

<details>
    <summary>Описание проекта, актуальность и проблематика</summary>

## Постановка задачи

На сегодняшний день работа по реагированию на неофициальные обращения от жителей организована
следующим образом: существует система для автоматизированной агрегации таких общений. Через систему
поступают обращения жителей из открытых источников, в основном это комментарии под различными
постами в социальных сетях `Вконтакте`, `Одноклассники` и мессенджера `Telegram`, а также обращения
в официальные аккаунты. Далее поступившие сообщения проходят классификацию и распределяются по
соответствующим ведомственным структурам в зависимости от тематики обращения.

На данный момент эти процессы производятся людьми – модераторами. Таким образом, с одной стороны
существует задержка по времени между обращением и передачей его в профильное ведомство, а с другой
стороны присутствуют расходы на оплату труда модераторов. Автоматизация процессов позволит сократить
расходы на их обеспечение, а также повысить скорость реакции со стороны профильных ведомств.

Актуальность решения данной задачи повышается еще и тем, что процессы по работе с обращениями
протекают во всех регионах `Российской Федерации`, что говорит о потенциале масштабирования решения.

Решение кейса представляет собой прототип системы классификации и выделения именованных сущностей. 
При оценке будет учитываться точность классификации и выделения сущностей.

</details>

## Техническая информация 

<details>
  <summary>Структура проекта</summary>

```linux
├── data
│   ├── images                  <------- Изображения
│   └── raw                     <------- Сырые данные
├── docs                        <------- Документация
├── models                      <------- Параметры моделей
├── notebooks                   <------- Ноутбуки с экспериментами
├── project                     <------- Основной код
│   └── source                   
│       ├── django_settings     <------- Конфиг сервиса
│       ├── ml                  <------- ML пайплайн
│       ├── string_processing   <------- Предобработка
│       ├── templates           <------- Шаблоны HTML-страниц
│       └── web                 <------- Сервис
└── tests                       <------- Тестирование
```

</details>

**Системные требования:** 

**OS `Linux`** (протестировано на `Ubuntu 22.04.3 LTS`).
    
В качестве менеджера пакетов используется `Poetry`.\
Все необходимые зависимости зафиксированы в конфигурационном файле — `pyproject.toml`.\
Основные команды определены в `Makefile`.

<details>
  <summary>Запуск тестирования</summary>

```linux
make tests
```
</details>

<details>
  <summary>Вызов справочной информации</summary>

```linux
make help
```

</details>

## Запуск проекта

<details>
  <summary>Установка виртуальный среды и пакетов</summary>

При необходимости согласиться с чем-то в консоли, необходимо вписать `y`.
```linux
make setup
```

</details>

<details>
  <summary>Добавление параметров модели</summary>

Загрузите параметры модели с гугл-диска:
https://drive.google.com/drive/folders/1fy8hYLdW1pJfB4Mysfs18tn_m1ZxPiz9?usp=sharing

И положите их в папку `models` в корне проекта.

</details>

<details>
  <summary>Запуск на Linux (стабильно)</summary>

```linux
make run_linux
```

Далее перейдите в браузере по адресу: http://127.0.0.1:8000/

</details>


<details>
  <summary>Запуск на Windows</summary>

```linux
make run_windows
```

Далее перейдите в браузере по адресу: http://127.0.0.1:8000/

</details>


## Пример работы

![example](data/images/example.gif)
